﻿using System;
using System.Drawing;
using System.IO;
//using System.Windows.Forms;
using NewLife;
using NewLife.Net;
using NewLife.Serialization;

namespace XCoder
{
    /// <summary>界面配置</summary>
    class UIConfig
    {
        //#region 属性
        ///// <summary>字体</summary>
        //public Font Font { get; set; }

        ///// <summary>背景颜色</summary>
        //public Color BackColor { get; set; }

        ///// <summary>前景颜色</summary>
        //public Color ForeColor { get; set; }
        //#endregion

        //private static UIConfig _Current;
        ///// <summary>当前配置</summary>
        //public static UIConfig Current
        //{
        //    get
        //    {
        //        if (_Current == null) _Current = Load() ?? new UIConfig();
        //        return _Current;
        //    }
        //}

        //public static UIConfig Load()
        //{
        //    var cfg = XConfig.Current;
        //    if (cfg.Extend.IsNullOrWhiteSpace()) return null;

        //    Byte[] buf = null;
        //    try
        //    {
        //        buf = cfg.Extend.ToBase64();
        //    }
        //    catch { return null; }

        //    var ms = new MemoryStream(buf);

        //    var binary = new Binary();
        //    binary.EncodeInt = true;
        //    binary.AddHandler<BinaryFont>(11);
        //    binary.AddHandler<BinaryColor>(12);
        //    binary.AddHandler<BinaryUnknown>(20);
        //    binary.Stream = ms;

        //    //binary.Debug = true;
        //    //binary.EnableTrace();

        //    try
        //    {
        //        return binary.Read(typeof(UIConfig)) as UIConfig;
        //    }
        //    catch { return null; }
        //}

        //public void Save()
        //{
        //    var binary = new Binary();
        //    binary.EncodeInt = true;
        //    binary.AddHandler<BinaryFont>(11);
        //    binary.AddHandler<BinaryColor>(12);
        //    binary.AddHandler<BinaryUnknown>(20);

        //    //binary.Debug = true;
        //    //binary.EnableTrace();

        //    binary.Write(this);

        //    var cfg = XConfig.Current;
        //    cfg.Extend = binary.GetBytes().ToBase64(0, 0, true);
        //    cfg.Save();
        //}

        //public static UIConfig Apply(TextBoxBase txt)
        //{
        //    // 加载颜色
        //    var ui = UIConfig.Load();
        //    if (ui?.Font == null) ui = null;
        //    if (ui != null)
        //    {
        //        try
        //        {
        //            txt.Font = ui.Font;
        //            txt.BackColor = ui.BackColor;
        //            txt.ForeColor = ui.ForeColor;
        //        }
        //        catch { ui = null; }
        //    }
        //    if (ui == null)
        //    {
        //        ui = UIConfig.Current;
        //        ui.Font = txt.Font;
        //        ui.BackColor = txt.BackColor;
        //        ui.ForeColor = txt.ForeColor;
        //        ui.Save();
        //    }

        //    // 菜单控制
        //    var menu = txt.ContextMenuStrip;
        //    if (menu != null)
        //    {
        //        var ti = Find(menu.Items, "字体", true);
        //        if (ti == null)
        //        {
        //            menu.Items.Insert(0, new ToolStripSeparator());

        //            ti = new ToolStripMenuItem("字体");
        //            menu.Items.Add(ti);
        //            ti.Click += mi字体_Click;

        //            ti = new ToolStripMenuItem("前景色");
        //            menu.Items.Add(ti);
        //            ti.Click += mi前景色_Click;

        //            ti = new ToolStripMenuItem("背景色");
        //            menu.Items.Add(ti);
        //            ti.Click += mi背景色_Click;
        //        }
        //    }

        //    return ui;
        //}

        //static ToolStripItem Find(ToolStripItemCollection items, String key, Boolean searchAllChildren)
        //{
        //    var tis = items.Find(key, searchAllChildren);
        //    if (tis != null && tis.Length > 0) return tis[0];

        //    foreach (ToolStripItem item in items)
        //    {
        //        if (item.Text.EqualIgnoreCase(key)) return item;
        //    }
        //    if (searchAllChildren)
        //    {
        //        foreach (ToolStripItem item in items)
        //        {
        //            var tdi = item as ToolStripDropDownItem;
        //            if (tdi != null)
        //            {
        //                var ti = Find(tdi.DropDownItems, key, searchAllChildren);
        //                if (ti != null) return ti;
        //            }
        //        }
        //    }

        //    return null;
        //}

        //static void mi字体_Click(Object sender, EventArgs e)
        //{
        //    var ti = sender as ToolStripItem;
        //    var txt = (ti.Owner as ContextMenuStrip).SourceControl as TextBoxBase;

        //    var fd = new FontDialog();
        //    fd.Font = txt.Font;
        //    if (fd.ShowDialog() != DialogResult.OK) return;

        //    txt.Font = fd.Font;

        //    var ui = UIConfig.Current;
        //    ui.Font = txt.Font;
        //    ui.Save();
        //}

        //static void mi前景色_Click(Object sender, EventArgs e)
        //{
        //    var ti = sender as ToolStripItem;
        //    var txt = (ti.Owner as ContextMenuStrip).SourceControl as TextBoxBase;

        //    var cd = new ColorDialog();
        //    cd.Color = txt.ForeColor;
        //    if (cd.ShowDialog() != DialogResult.OK) return;

        //    txt.ForeColor = cd.Color;

        //    var ui = UIConfig.Current;
        //    ui.ForeColor = txt.ForeColor;
        //    ui.Save();
        //}

        //static void mi背景色_Click(Object sender, EventArgs e)
        //{
        //    // ((System.Windows.Forms.ContextMenuStrip)(((System.Windows.Forms.ToolStripItem)(sender)).Owner)).SourceControl
        //    var ti = sender as ToolStripItem;
        //    var txt = (ti.Owner as ContextMenuStrip).SourceControl as TextBoxBase;

        //    var cd = new ColorDialog();
        //    cd.Color = txt.BackColor;
        //    if (cd.ShowDialog() != DialogResult.OK) return;

        //    txt.BackColor = cd.Color;

        //    var ui = UIConfig.Current;
        //    ui.BackColor = txt.BackColor;
        //    ui.Save();
        //}
    }
}